<?php
declare (strict_types=1);

// +----------------------------------------------------------------------
// | SCApi
// +----------------------------------------------------------------------
// | 版权所有 2021~2022 贾二小 [ http://www.ipsoul.com ]
// +----------------------------------------------------------------------
// | 官方网站: http://www.ipsoul.com
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// | 免费声明 ( http://doc.ipsoul.com/disclaimer )
// +----------------------------------------------------------------------
// | gitee 代码仓库：https://gitee.com/jiaerxiao/scapi
// | github 代码仓库：https://github.com/jiaerxiao/scapi
// +----------------------------------------------------------------------

namespace app\system\service;

use app\common\service\BaseService;
use think\App;

class TableService extends BaseService
{
    /**
     * 初始化
     * @param App $app
     */
    public function __construct(App $app)
    {
        bind('TableColumnService', TableColumnService::class);
        parent::__construct($app, '表格管理', 'table');
        //自动转Boolean
        array_push($this->config['booleans'], 'remoteFilter', 'remoteSort');
    }

    /**
     * 表格数据
     * @author 贾二小
     * @since 2021/11/20
     */
    public function tableList(): array
    {
        $map = [];
        return $this->table($map);
    }

    /**
     * 详情
     * @author 贾二小
     * @since 2021/11/23
     */
    public function infoDetails(int $id)
    {
        $data = $this->infoById($id);
        $map = [];
        $map[] = ['table_id', '=', $data['id']];
        $dataColumn = app('TableColumnService')->list($map);
        $dataColumn = array_map(function ($item) {
            $item['filters'] = json_decode($item['filters'], true);
            return $item;
        }, $dataColumn->toArray());
        $data['columns'] = $dataColumn;
        return $data;
    }

    /**
     * 保存(系统设置和短信配置)
     * @author 贾二小
     * @since 2021/11/24
     */
    public function saving(array $paramData): void
    {
        array_walk($paramData, function ($val, $key) {
            $map = [];
            $map[] = ['key', '=', $key];
            $val = $val === false ? 0 : $val;
            $this->updateByMap($map, ['value' => $val]);
        });
    }
}